package com.godGuang.controller;


import com.godGuang.common.core.domain.PageResult;
import com.godGuang.common.core.domain.Result;
import com.godGuang.common.core.utils.StringUtils;
import com.godGuang.domain.*;
import com.godGuang.domain.request.RequestContent;
import com.godGuang.servser.ContentService;
import com.godGuang.util.OssUtil;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Primary;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;


/**
 * 发布建议Controller层
 */

@RestController
@RequestMapping("/content")
@Log4j2
public class ContentController {


    /**
     * 注入内容服务层
     */
    @Autowired
    private ContentService contentService;



    /**
     * 获取内容列表
     *
     * @return 返回内容列表
     */
    @PostMapping("/list")
    public Result<List<Content>> list(){
        log.info("获取内容列表");
        List<Content> creatures =  contentService.list();
        log.info("获取内容列表成功:{}", creatures);
        return Result.success(creatures);
    }



    /**
     * 添加内容
     *
     * @param content 内容对象
     * @return 返回操作结果
     */
    @PostMapping("/contentAdd")
    public Result addContent(@RequestBody Content content) {
        log.info("添加内容;{}", content);
        // 检查科室类型是否为空
        if (null == content.getCatalogueId()) {
            log.info("科室类型不能为空");
            // 抛出异常，科室类型不能为空
            throw new RuntimeException("科室类型不能为空");
        }
        // 检查标题是否为空
        if (StringUtils.isBlank(content.getContentTitle())) {
            log.info("标题不能为空");
            // 抛出异常，标题不能为空
            throw new RuntimeException("标题不能为空");
        }
        // 检查内容是否为空
        if (StringUtils.isBlank(content.getContent())) {
            log.info("内容不能为空");
            // 抛出异常，内容不能为空
            throw new RuntimeException("内容不能为空");
        }
        // 调用内容服务添加内容的方法
        contentService.addContent(content);
        log.info("添加成功");
        // 返回操作成功响应结果
        return Result.success();
    }

    /**
     * 查询内容列表
     *
     * @param requestContent 查询内容请求对象
     * @return 返回查询内容列表响应结果
     */
    @PostMapping("/contentList")
    public Result<List<Content>> createContentList(@RequestBody RequestContent requestContent) {
        log.info("查询内容列表:{}", requestContent);
        // 调用内容服务查询内容列表的方法
        List<Content> contents = contentService.createContentList(requestContent.getCatalogueId());
        log.info("查询成功:{}", contents);
        // 返回查询内容列表响应结果
        return Result.success(contents);
    }

    /**
     * 查询疾病列表
     *
     * @param catalogueId 疾病id
     * @return 返回查询疾病列表响应结果
     */
    @PostMapping("/diseaseList/{catalogueId}")
    public Result<List<Disease>> diseaseList(@PathVariable String catalogueId) {
        log.info("查询疾病列表:{}", catalogueId);
        // 调用内容服务查询疾病列表的方法
        List<Disease> disease = contentService.diseaseList(catalogueId);
        log.info("查询成功:{}", disease);
        // 返回查询疾病列表响应结果
        return Result.success(disease);
    }


    /**
     * 上传图片
     *
     * @param file 图片
     * @return 返回上传图片响应结果
     */
    @Primary
    @PostMapping("/upLoad")
    public Result picture(@RequestParam("file") MultipartFile file) {
        log.info("上传图片:{}", file);
        // 调用OSS工具类上传图片的方法
        String url = OssUtil.uploadMultipartFile(file);
        log.info("图片地址:{}", url);
        // 返回上传图片响应结果
        return Result.success(url);
    }


    /**
     * 根据id查询内容
     *
     * @param contentId 内容id
     * @return 内容结果
     */
    @PostMapping("/contentById/{contentId}")
    public Result<Content> contentById(@PathVariable String contentId){
        log.info("根据id查询内容:{}", contentId);
        // 调用内容服务查询内容的方法
        Content content = contentService.contentById(contentId);
        log.info("查询成功:{}", content);
        // 返回查询内容响应结果
        return Result.success(content);
    }


    /**
     * 根据内容ID查询内容中间数据
     *
     * @param contentEnshrineMiddle 内容中间数据
     * @return 查询结果
     */
    @PostMapping("/contentEnshrineMiddleData")
    public Result<ContentEnshrineMiddle> contentEnshrineMiddleData(@RequestBody ContentEnshrineMiddle contentEnshrineMiddle){
        log.info("根据id查询内容:{}", contentEnshrineMiddle);
        ContentEnshrineMiddle contentEnshrineMiddleList = contentService.contentEnshrineMiddleData(contentEnshrineMiddle);
        log.info("查询成功:{}", contentEnshrineMiddleList);
        return Result.success(contentEnshrineMiddleList);
    }

    /**
     * 添加中间页内容
     *
     * @param enshrine 封装中间页信息的对象
     * @return 返回操作结果
     */
    @PostMapping("/contentEnshrineMiddleAdd")
    public Result contentEnshrineMiddleAdd(@RequestBody Enshrine enshrine){
        log.info("根据id查询内容:{}", enshrine);
        contentService.contentEnshrineMiddleAdd(enshrine);
        log.info("查询成功:{}", enshrine);
        return Result.success();
    }



    /**
     * 根据用户ID查询收藏夹内容
     *
     * @param userId 用户ID
     * @return 包含内容的列表
     */
    @PostMapping("/myCollection/{userId}")
    public Result<List<Content>> myCollection(@PathVariable String userId){
        log.info("根据id查询内容:{}", userId);
        List<Content> contents = contentService.myCollectionList(userId);
        log.info("查询成功:{}", contents);
        return Result.success(contents);
    }



    /**
     * 根据用户ID查询个人发布的内容列表
     *
     * @param userId 用户ID
     * @return 查询结果
     */
    @PostMapping("personalPublishingList/{userId}")
    public Result personalPublishingList(@PathVariable String userId){
        log.info("根据id查询内容:{}", userId);
        List<Content> contents = contentService.personalPublishingList(userId);
        log.info("查询成功:{}", contents);
        return Result.success(contents);
    }




}
